import { createApp } from 'vue';
// global css
import 'uno.css';
import '@/assets/styles/index.scss';
import 'element-plus/theme-chalk/dark/css-vars.css';

// App、router、store
import App from './App.vue';
import store from './store';
import router from './router';

// 自定义指令
import directive from './directive';

// 注册插件
import plugins from './plugins/index'; // plugins
import { download } from '@/utils/request';

// 预设动画
import animate from './animate';

// svg图标
import 'virtual:svg-icons-register';
import ElementIcons from '@/plugins/svgicon';

// permission control
import './permission';

import { useDict } from '@/utils/dict';
import { getConfigKey, updateConfigByKey } from '@/api/system/config';
import { parseTime, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi';
import useVersionStore from '@/store/modules/version';

// 国际化
import i18n from '@/lang/index';

const app = createApp(App);
// 全局方法挂载
/**
 * @description: 用于获取数据字典
 * @return {*}
 */
app.config.globalProperties.useDict = useDict;
/**
 * @description: 发起请求 获取参数的详细信息
 * @param configKey 参数的键名
 * @return {*}
 */
app.config.globalProperties.getConfigKey = getConfigKey;
/**
 * @description: 发起请求 更新参数
 * @param key 更新参数的键
 * @param value 更新参数的值
 * @return {*}
 */
app.config.globalProperties.updateConfigByKey = updateConfigByKey;
/**
 * @description: 通用的下载方法
 * @param url 下载的链接
 * @param params 下载的参数
 * @return {*}
 */
app.config.globalProperties.download = download;
/**
 * @description: 全局格式化时间方法
 * @param time 时间
 * @param pattern 时间格式
 * @return {*}
 */
app.config.globalProperties.parseTime = parseTime;
/**
 * @description: 构造树形结构的数据
 * @return {*}
 */
app.config.globalProperties.handleTree = handleTree;
/**
 * @description: 将传入的时间段数组 格式化为单个时间写入搜索参数中
 * @return {*}
 */
app.config.globalProperties.addDateRange = addDateRange;
/**
 * @description: 回显数据字典
 * @return {*}
 */
app.config.globalProperties.selectDictLabel = selectDictLabel;
/**
 * @description: 回显数据字典
 * @return {*}
 */
app.config.globalProperties.selectDictLabels = selectDictLabels;
app.config.globalProperties.animate = animate;

app.use(ElementIcons);
app.use(store);
app.use(i18n);
app.use(plugins);
const versionStore = useVersionStore();
// 自定义指令
directive(app);

// 在入口文件先注入版本号
versionStore.updateVersion().then(() => {
  app.use(router);
  app.mount('#app');
});
